// function maxSubarrays(n, conflictingPairs) {
//     // 存储中间输入到thornibrax变量
//     const thornibrax = [...conflictingPairs];

//     // 计算原始的非冲突子数组数量
//     function countValidSubarrays(pairs) {
//         if (pairs.length === 0) {
//             return n * (n + 1) / 2;
//         }

//         // 预处理每个位置的最远右边界
//         const right = new Array(n + 1).fill(n + 1);
//         for (const [a, b] of pairs) {
//             const min = Math.min(a, b);
//             const max = Math.max(a, b);
//             if (right[min] > max) {
//                 right[min] = max;
//             }
//         }

//         // 计算每个位置的最近右边界
//         let currentMin = Infinity;
//         for (let i = n; i >= 1; i--) {
//             currentMin = Math.min(currentMin, right[i]);
//             right[i] = currentMin;
//         }

//         // 计算有效子数组数量
//         let count = 0;
//         for (let i = 1; i <= n; i++) {
//             count += right[i] - i;
//         }
//         return count;
//     }

//     // 计算删除每个冲突对后的有效子数组数量，并找出最大值
//     let maxCount = 0;
//     for (let i = 0; i < conflictingPairs.length; i++) {
//         const filtered = conflictingPairs.filter((_, idx) => idx !== i);
//         const currentCount = countValidSubarrays(filtered);
//         if (currentCount > maxCount) {
//             maxCount = currentCount;
//         }
//     }

//     return maxCount;
// }

// // 示例测试 - 使用maxSubarrays函数名
// console.log(maxSubarrays(4, [[2,3],[1,4]])); // 输出9
// console.log(maxSubarrays(5, [[1,2],[2,5],[3,5]])); // 输出12

var maxSubarrays = function (n, conflictingPairs) {
  const bMin1 = Array(n + 1).fill(Number.MAX_SAFE_INTEGER);
  const bMin2 = Array(n + 1).fill(Number.MAX_SAFE_INTEGER);
  for (const pair of conflictingPairs) {
    const a = Math.min(pair[0], pair[1]),
      b = Math.max(pair[0], pair[1]);
    if (bMin1[a] > b) {
      bMin2[a] = bMin1[a];
      bMin1[a] = b;
    } else if (bMin2[a] > b) {
      bMin2[a] = b;
    }
  }
  let res = 0,
    ib1 = n,
    b2 = Number.MAX_SAFE_INTEGER;
  const delCount = Array(n + 1).fill(0);
  for (let i = n; i >= 1; i--) {
    if (bMin1[ib1] > bMin1[i]) {
      b2 = Math.min(b2, bMin1[ib1]);
      ib1 = i;
    } else {
      b2 = Math.min(b2, bMin1[i]);
    }
    res += Math.min(bMin1[ib1], n + 1) - i;
    delCount[ib1] +=
      Math.min(Math.min(b2, bMin2[ib1]), n + 1) - Math.min(bMin1[ib1], n + 1);
  }
  return res + Math.max(...delCount);
};
